Første møde med Python og UCloud

Jeppe Fjeldgaard Qvist

2025-09-01

Kodning?! 🐍

  • Hvad er jeres erfaring (hvis I har nogen)?

  • Hvordan forstår i “kodning”; hvorfor bruger vi ikke bare Excel eller lign.?

  • Hvis I har erfaring; er det en god erfaring? Hvordan lærte i det bedst; hvad var svært?

“Kodning” vs. Excel

Reproducerbar, skalerbar, fleksibel og automatisering!

Når Excel kommer til kort:

  • Analysere 100.000-vis af rækker data.

  • Gentage den samme analyse hver [dag/måned/år] med nye data.

    • I Excel: hvis data ændrer sig, skal vi gentage alle klik.
  • Dokumentere præcist, hvad vi har gjort, så en kollega kan gentage det.

  • Kombinere data fra [mange] forskellige kilder.

  • Lave avancerede statistiske modeller.

Python; et kodesprog

Tænk på kodning som et meget detaljeret opskrift. Så fremfor en abstract “bland ingredienserne” (Excel; peg-og-klik), skriver vi:

Reproducerbar

Hvordan fik du resultatet?

monthly_average = data.groupby('month')['sales'].mean()

Alle trin i koden er en komplet log over hvad du har gjort ved dataen for at få dit output.

Når næste års data kommer, ændres blot url = "https://...." til den nye data og det hele køres igen.

Skalerbarhed

Den samme kode, der arbejder med 100 rækker, kan håndtere millioner af rækker uden problemer. (Flere rækker betyder dog logisk nok mere computerkraft og tid)

Fleksibilitet

Python har tusindvis af specialiserede “værktøjskasser” (biblioteker) til alt fra grundlæggende statistik og datahåndtering til machine learning og kunstig intelligens.

Automatisering

Skriv koden én gang, kør den hver dag/uge/måned/år automatisk.

Kodning: Kommunikation med maskinen

Kodning skal være utvetydigt og logisk struktureret for at maskine “forstår” os.

I skal på kurset oparbejde en algoritmisk tænkning.

Spg.: Hvad tænker I når i hører ordet Algoritme?

  • Algoritmisk tænkning:

    • Dekomposition: Bryde komplekse problemer ned i mindre, håndterbare dele
    • Mønstergenkendelse: Identificere ligheder på tværs af forskellige problemer
    • Abstraktion: Fokusere på de væsentlige aspekter og ignorere irrelevante detaljer
    • Algoritmedesign: Step-by-step løsninger der kan automatiseres

Hvorfor Python? 🐍

  • (Relativt) simpelt.

  • Stor brugerbase.

  • Omfattende biblioteker til alle forskningsområder.

Kodning af en tanke til handling i 4 niveauer

Niveau 1: Menneskelig tanke

“Jeg vil finde gennemsnittet af mine salgstal”

Niveau 2: Algoritmisk tænkning

“Læg alle tallene sammen, divider med antallet af tal”





\[ \bar{x} = \frac{x_1 + x_2 + x_3 + \ldots + x_n}{n} = \frac{\sum_{i=1}^{n} x_i}{n} \]

Niveau 3: Python-kode

Hvad har vi implementeret her:

  1. \(\text{total} = \sum_{i=1}^{n} \text{sales}_i\)

  2. \(\text{gennemsnit} = \frac{\text{total}}{n} = \frac{\sum_{i=1}^{n} \text{sales}_i}{n}\), Hvor \(n\) er antallet af salgstal i datasættet.

  3. Udskriv resultatet

Niveau 4: Maskinsprog

Maskinen forstår ikke Python (?!)

  • Computeren forstår kun maskinkode. Hvilket er lavniveau instruktioner bestående af \(1\)-taller og \(0\)’er (binary), som CPU’en kan arbejde med.

  • Python fortolkeren oversætter altså koden til noget som maskinen kan forstå: og Python er muligt nemmere at læse for mennesker end maskinkode.

  • Denne oversættelse forgår i en mellemform (assembly-sprog), der er meget mere besværligt at arbejde med end Python, a la:

LOAD data
ADD all values
DIVIDE by count
STORE result

Som I maskinkode kunne se således ud:

10110000 01100001

Process:

Høj-niveau:

total = sum(data)  
gennemsnit = total / len(data)

Mellem-niveau:

LOAD data
ADD all values
DIVIDE by count
STORE result

Lav-niveau:

10110000 01100001

Præcision er nøglen!

“Kan du hente en kop kaffen?”

Vi forstår implicit: Gå ud i køkkenet, tag en kop, hæld kaffe i koppen, kom tilbage.

Oversat til eksplicitte instruktioner:

  1. cup = get_cup_from_kitchen()
  2. coffee = pour_coffee(cup)
  3. return coffee_to_desk(cup)

Præcise instrukser

Hvilke salg er større end 10.000 (DKK)?

  1. Tag første tal fra listen
  2. Er det større end 10000? Hvis ja, print det
  3. Tag næste tal
  4. Gentag indtil listen er tom

\[ \begin{aligned} \textbf{for hvert } \text{tal} ~ i ~ \text{salgstal}: \\ \quad \textbf{hvis } \text{tal} ~større~end~ 10000: \\ \qquad \textbf{udskriv} ~ \text{tal} ~~ \end{aligned} \]

Variable og Pythons hukommelse

Bemærk: data har virket flere steder i vores kode, selvom vi kun har indlæst den én gang.



pris = 100

moms = pris * 0.25

total = pris + moms

print(total)


  1. Tag værdien 100 og gem det i hukommelseslokation kaldet ‘pris’

  2. Tag værdien fra ‘pris’, gang med 0.25, gem resultatet som ‘moms’

Maskinen er ligeglad med om navne giver mening. Vi bruger meningsfulde navne for at forstå vores egen kode.

Funktioner: Genanvendelige “opskrifter”

Defination af funktioner svarer til at lære maskinen en ny “kommando”. Nu kan vi sige beregn_moms(tal) og maskinen ved præcist, hvad den skal gøre, fordi vi har defineret hver eneste trin.

Den fundamentale erkendelse om maskiner

Maskiner er utroligt dumme men utroligt hurtige og pålidelige. De kan kun gøre simple ting som:

  • Gemme tal
  • Sammenligne værdier
  • Hoppe til forskellige dele af koden
  • Gentage instruktioner

Men de kan gøre disse simple ting milliarder af gange per sekund uden fejl.

Kodningens kunst ligger i at bryde komplekse menneskelige problemer ned til disse simple operationer og derefter komponere dem sammen til kraftfulde løsninger.

Computational Social Science

Eks.: Digitale metoder til kriminalitetsforståelse

Vi flytter fra små, lokale undersøgelser til analyser af massive datasæt der kan afsløre mønstre, vi aldrig kunne se før.

  • Traditionel tilgang: En kriminolog interviewer 50 tidligere indsatte over 6 måneder for at forstå recidiv-mønstre.

  • Computational tilgang: Analyser alle \(n\) millioner straffesager fra de sidste 20 år og identificer risikofaktorer for tilbagefald.

Spatial kriminologi: Når kriminalitet [data] får koordinater

Predictive Policing: Algoritmer der forudsiger [data] kriminalitet

De store spørgsmål koden ikke selv kan svare på: Etik og bias

Arbejde i UCloud

Cloud computing and HPC

  • HPC: At bruge mange kraftige computere, som er koblet sammen i store klynger (clusters), til at løse komplekse og krævende opgaver.

  • Cloud computing: Adgang til computerressourcer (fx programmer, lagerplads og regnekraft) via internettet, fremfor at have det hele installeret på sin egen computer.

  • UCloud: En dansk platform udviklet af Syddansk Universitet (SDU) og Aalborg Universitet (AAU). Den gør det muligt for forskere, undervisere og studerende at udnytte HPC-ressourcer på en enkel måde.

    • Køre programmer uden installation: UCloud tilbyder et bibliotek af applikationer (fx RStudio, Jupyter Notebooks, MATLAB, Stata, Python, osv.), som kan startes direkte i browseren.

    • Brug HPC-ressourcer: Når du starter en applikation, vælger du selv hvor meget regnekraft (CPU, GPU, RAM) du har brug for. Du arbejder stadig i en browser, men beregningen sker på en HPC-klynge.

    • Datahåndtering: Du kan uploade, downloade og organisere dine data direkte i UCloud. Der er også muligheder for sikker deling af data med kolleger.

    • Samarbejde: Projekter i UCloud kan deles med andre brugere, så man kan arbejde på de samme data og applikationer.

UCLoud i praksis

  1. Log ind med WAYF (din universitetslogin).

  2. Vælg et projekt: Al arbejde i UCloud foregår i projekter, hvor du kan organisere applikationer, data og brugere.

  3. Start en applikation: Fx Jupyter, og vælg hvor meget regnekraft du skal bruge.

  4. Arbejd som normalt i applikationen, men med adgang til langt kraftigere ressourcer end din egen computer.

  5. Gem og del resultater: alt bliver gemt i dit projekt, og kan deles med andre eller eksporteres til lokal computer.